<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>常见的闭包</title>
</head>

<body>
    <!-- 
        1. 将函数作为另一个函数的返回值
        2. 将函数作为实参传递给另一个函数调用
     -->
    <script>
        // 1. 将函数作为另一个函数的返回值
        function Fn1() {
            //  代码运行到这里时闭包就产生了，因为函数提升！！
            var a = 2
            function Fn2() {
                a++
                console.log(a)
            }
            return Fn2
        }
        var f = Fn1()
        //  输出3
        f()
        //  输出4
        // 正常的是在Fn1被调用时产生a，调用结束时a消亡，但这里a是一直存在的（由于闭包的存在）
        f()
        // 2. 将函数作为实参传递给另一个函数调用
        function showDelay(msg, time) {
            setTimeout(function () {
                alert(msg)
            }, time)
        }
        showDelay('Little Beauty', 1000)

    </script>
</body>

</html>